Backdrop

프로그래머스 ▸ 코딩 기초 트레이닝

길이에 따른 연산
0

문제 설명

정수가 담긴 리스트 num_list가 주어질 때, 리스트의 길이가 11 이상이면 리스트에 있는 모든 원소의 합을 10 이하이면 모든 원소의 곱을 return하도록 solution 함수를 완성해주세요.

제한사항

  • 2 ≤ num_list의 길이 ≤ 20
  • 1 ≤ num_list의 원소 ≤ 9
  • num_list의 원소를 모두 곱했을 때 2,147,483,647를 넘는 입력은 주어지지 않습니다.

입출력 예

num_listresult
[3, 4, 5, 2, 5, 4, 6, 7, 3, 7, 2, 2, 1]51
[2, 3, 4, 5]120

입출력 예 설명

입출력 예 #1

  • 리스트의 길이가 13이므로 모든 원소의 합인 51을 return합니다.

입출력 예 #2

  • 리스트의 길이가 4이므로 모든 원소의 곱인 120을 return합니다.

풀이

이론

Array.prototype.reduce()

배열의 각 요소에 대해 주어진 리듀서(reducer) 함수를 실행하고, 하나의 결과값을 반환해요.

arr.reduce(callback[, initialValue]);

callback 함수는 네 개의 인자를 가져요.

  • accumulator (acc, prev) : 콜백의 반환값을 누적
  • currentValue (cur, curr) : 처리할 현재 요소
  • currentIndex (idx, index) : 처리할 현재 요소의 인덱스 (optional)
  • array (src) : reduce()를 호출한 배열 (optional)

initialValue를 제공한 경우, accinitialValue와 같고, cur는 배열의 첫 번째 요소와 같아요.

initialValue를 제공하지 않은 경우, acc는 배열의 첫 번째 요소와 같고, cur는 두 번째 요소와 같아요.

const arr = [1, 2, 3, 4, 5];
const sum = arr.reduce((prev, curr) => prev + curr, 0);
console.log(sum); // 15

map vs reduce

map()은 반환값이 같은 길이의 배열이고, reduce()는 반환값이 무엇이든 상관없어요. 주어진 조건에 따라 map()reduce() 또는 다른 메서드를 사용해야 해요.

코드

function solution(num_list) {
  if (num_list.length > 10) {
    return num_list.reduce((acc, cur) => acc + cur);
  } else {
    return num_list.reduce((acc, cur) => acc * cur);
  }
}